/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2025, Main, China, QD.
**                           All Rights Reserved
**
**                                 By(wo4fisher)
**                           http://www.wo4fisher.com
**
**----------------------------------文件信息------------------------------------
** 文件名称: APP.C
** 创建人员: wht
** 创建日期: 2025-08-14
** 文档描述: 
**
**----------------------------------版本信息------------------------------------
** 版本代号: V0.1
** 版本说明: 初始版本
**
**------------------------------------------------------------------------------
\********************************End of Head************************************/
#include "app.h"
#include "spi.h"
#include "adc.h"
#include "dac.h"
#include "dma.h"

/*-------------- 变量 ---------------*/
// 流量计脉冲计数变量
volatile uint32_t pf_pulse_count = 0;



/*-------------- 函数---------------*/

/*-------------- 1 VALVE ---------------*/
void valve_gpio_init(void);
void valve_set_cw(void);
void valve_set_ccw(void);
void valvee_set_free(void);

/*-------------- 2 UVC -----------------*/
// 定义状态变量，记录uvc启停状态
void uvc_init(void)   // gpio dac adc
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOA_CLK_ENABLE(); 

    /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(UVC_PWR_GPIO_Port, UVC_PWR_Pin, GPIO_PIN_SET);
  
  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = UVC_PWR_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(UVC_PWR_GPIO_Port, &GPIO_InitStruct);
  
  MX_ADC1_Init();
  MX_DMA_Init();
  MX_DAC_Init();
  
}
uint8_t uvc_pwr_on(void) // rturn 1
{
    HAL_GPIO_WritePin(UVC_PWR_GPIO_Port,UVC_PWR_Pin,GPIO_PIN_RESET);
    //打开紫外灯 设置dac  同时启动ADC转换
    
    return 1;
}
uint8_t uvc_pwr_off(void)  //return 0
{
    HAL_GPIO_WritePin(UVC_PWR_GPIO_Port,UVC_PWR_Pin,GPIO_PIN_SET);
    //关闭紫外灯 设置dac  同时停止ADC转换
    
    return 0;
}
/*-------------- 3 HMI -----------------*/
//循环缓冲区，数据接收、解析

/*------ 4 BUTTON 在另一个文件里 --------*/

/*-------------- 5 RFID ----------------*/
void rfid_init(void)  // gpio spi for 522
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOC_CLK_ENABLE(); 
  /*Configure GPIO pins : PCPin PCPin */
  GPIO_InitStruct.Pin = RF_NSS_Pin|RF_RST_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
  MX_SPI2_Init();
  
  // rf522 初始化
  
}
uint32_t rfid_read_id(void)
{
    uint32_t res = 0;
    
    return res;
}

/*-------------- 6 PF ------------------*/
void pf_init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOA_CLK_ENABLE();
  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = FT_PULSE_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(FT_PULSE_GPIO_Port, &GPIO_InitStruct);
  
    /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(EXTI2_IRQn);
}
/**
 * @brief 清零脉冲计数值
 */
void pf_clear_pulse_count(void)
{
    __disable_irq();  // 关闭全局中断，防止竞争条件
    pf_pulse_count = 0;
    __enable_irq();   // 重新开启全局中断
}

/*-------------- 中断服务函数 ------------------*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
    pf_pulse_count++;
  } 
}
// HMI 触摸屏发送数据,单片机接收到
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART3)
    {
         
    }
}

/********************************End of File************************************/